package com.japhet.stripesdemo;


import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.fill.Column;

import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class MyBatisPlusGeneratorByFast {

    private static final String projectPath = System.getProperty("user.dir");
    private static final String separator = File.separator;
    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://ip:port/stripe_demo?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=true&serverTimezone=GMT%2B8"
                        , "root"
                        , "password")
                // 全局配置
                .globalConfig((builder) -> {
                    builder
//                            .enableSwagger() // 是否启用swagger注解
                            .author("guidesc")
//                            .dateType(DateType.ONLY_DATE) // 时间策略
//                            .commentDate("yyyy-MM-dd") // 注释日期
//                            .fileOverride()
                            .outputDir(projectPath)
//                            .disableOpenDir()//禁止打开目录
                    ;
                })
                // 包配置
                .packageConfig((builder) -> {
                    builder
                            .parent("com.japhet.stripesdemo.dao")
//                            .moduleName("test") // 模块包名
                            .entity("entity") // 实体类包名
                            .service("service") // service包名
                            .serviceImpl("service.impl") // serviceImpl包名
                            .mapper("mapper") // mapper包名
//                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "C:\\Dpan\\workspace\\study\\Ibatis_generate\\src\\main\\resources\\mappers")) // xml位置（还可自定义配置entity，service等位置）
//                            .controller("controller") // controller包名
//                            .other("model"); // 自定义包名
                    ;
                })
                // 策略配置
                .strategyConfig((builder) -> {
                    builder
//                            .addTablePrefix("t_") // 增加过滤表前缀
//                            .addTableSuffix("_db") // 增加过滤表后缀
//                            .addFieldPrefix("t_") // 增加过滤字段前缀
//                            .addFieldSuffix("_field") // 增加过滤字段后缀
                            .addInclude(MyBatisPlusGeneratorByFast.getTables("user_payment_method")) // 请输入表名，多个英文逗号分隔？所有输入 all

                            // Entity 策略配置
                            .entityBuilder() //构建entity实体类
                            .enableLombok() // 开启lombok
                            .enableChainModel() // 链式
                            .enableRemoveIsPrefix() // 开启boolean类型字段移除is前缀
                            .enableTableFieldAnnotation() //开启生成实体时生成的字段注解
                            .versionColumnName("version") // 乐观锁数据库字段
                            .versionPropertyName("version") // 乐观锁实体类名称
                            .logicDeleteColumnName("delete_flag") // 逻辑删除数据库中字段名
                            .logicDeletePropertyName("deleteFlag") // 逻辑删除实体类中的字段名
                            .naming(NamingStrategy.underline_to_camel) // 表名 下划线 -》 驼峰命名
                            .columnNaming(NamingStrategy.underline_to_camel) // 字段名 下划线 -》 驼峰命名
                            .idType(IdType.ASSIGN_ID) // 主键生成策略 雪花算法生成id
                            .formatFileName("%s") // Entity 文件名称
                            .addTableFills(new Column("gmt_create", FieldFill.INSERT)) // 表字段填充
                            .addTableFills(new Column("gmt_modified", FieldFill.INSERT_UPDATE)) // 表字段填充
                            //.enableColumnConstant()
                            .enableActiveRecord()

                            // Controller 策略配置
//                            .controllerBuilder()
//                            .enableRestStyle() // 开启@RestController
//                            .formatFileName("%sController") // Controller 文件名称

                            // Service 策略配置
                            .serviceBuilder()
                            .formatServiceFileName("%sService") // Service 文件名称
                            .formatServiceImplFileName("%sServiceImp") // ServiceImpl 文件名称

                            // Mapper 策略配置
                            .mapperBuilder()
//                            .enableMapperAnnotation() // 开启@Mapper
                            .enableBaseColumnList() // 启用 columnList (通用查询结果列)
                            .enableBaseResultMap() // 启动resultMap
                            .formatMapperFileName("%sMapper") // Mapper 文件名称
                            .formatXmlFileName("%sMapper")// Xml 文件名称
                            .build();

                })
                .execute();
    }
}

